package SFI.Controlador;

import SFI.acceso.Delegado;
import factura.modelo.Cliente;
import java.util.ArrayList;
import java.util.List;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.NotifyChange;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Messagebox;

/**
 *
 *
 * @author Romig Sevilla
 * @version 1.0
 *
 *
 */
public class ControladorCliente extends ControladorArticulo {

    //Condicion de busqueda
    String filter = "*";
    //resultado de la busqueda
    ListModelList<Cliente> cliente;
    //seleccion de clientes
    Cliente selected;
    Delegado deleg = Delegado.getInstance();
    List<Cliente> allCliente = new ArrayList<Cliente>();
    String deleteMessage;

    public String getDeleteMessage() {
        return deleteMessage;
    }

    public String getFilter() {
        return filter;
    }

    public void setFilter(String filter) {
        this.filter = filter;
    }

    public ListModelList<Cliente> getCliente() {
        if (cliente == null) {
            busqueda();
        }
        return cliente;
    }
    
    public Cliente getSelected() {
        return selected;
    }

    public void setSelected(Cliente selected) {
        this.selected = selected;

    }

    @NotifyChange({"cliente", "selected"})
    @Command
    public void busqueda() {
        cliente = new ListModelList<Cliente>();
        allCliente = deleg.buscarTodos(Cliente.class, "nombre", true, true);
        cliente.addAll(this.search(filter));
        selected = null;
    }


    @NotifyChange({"selected", "cliente"})
    @Command
    public void nuevoCliente() {
        Cliente clientenew = new Cliente();
        this.getCliente().add(clientenew);
        selected = clientenew;

    }

    @NotifyChange({"selected", "cliente"})
    @Command
    public void guardarCliente() {
        selected.setEstatus(Boolean.TRUE);
        int result = deleg.insert(selected);
        if (result == 0) {
            allCliente.add(selected);
            selected = null;
            Messagebox.show("Registro Exitoso");
        } else if (result == 1) {
            Messagebox.show("Ya existe el usuario");

        } else if (result == 2 || result == 3) {
            Messagebox.show("Error no documentado");

        }

    }

    @NotifyChange({"selected", "cliente", "deleteMessage"})
    @Command
    public void eliminarCliente() {
        System.out.println("ejecutooooooooooooooooooooo");
        Cliente client = deleg.buscar(Cliente.class, selected.getId());
        client.setEstatus(Boolean.FALSE);
        int result = deleg.modificar(client);
        if (result == 0) {
            allCliente.remove(selected);
            cliente.remove(selected);
            selected = null;
            deleteMessage = null;
        } else if (result == 1) {
            Messagebox.show("Ya existe el usuario");

        } else if (result == 2 || result == 3) {
            Messagebox.show("Error no documentado");

        }

    }

    @NotifyChange({"selected", "cliente"})
    @Command
    public void modificarCliente() {
        Cliente client = deleg.buscar(Cliente.class, selected.getId());

        client.setNombre(selected.getNombre());
        client.setApellido(selected.getApellido());
        client.setTelefono(selected.getTelefono());
        client.setDireccion(selected.getDireccion());
        int result = deleg.modificar(client);
        if (result == 0) {
            System.out.println("ejecuto este ");
            selected = null;
            Messagebox.show("!!! Operación exitosa !!!");
        } else if (result == 1) {
            Messagebox.show("!!! Ya existe el usuario !!!");

        } else if (result == 2 || result == 3) {
            Messagebox.show("!!! Error no documentado !!!");

        }

    }

    @NotifyChange("deleteMessage")
    @Command
    public void confirmDelete() {
        System.out.println("ejecuto este eeeeeeeeeeeeeeeeee");
        deleteMessage = "Va a Eliminar El Registro ";
    }

    @NotifyChange("deleteMessage")
    @Command
    public void cancelDelete() {
        //clear the message
        deleteMessage = null;
    }

    public List<Cliente> search(String fitler) {
        List<Cliente> clientes = new ArrayList<Cliente>();
        for (Cliente cliente1 : allCliente) {
            if ((fitler == null || "*".equals(fitler))
                    || cliente1.getNombre().indexOf(fitler) >= 0) {
                clientes.add(cliente1);
            }
        }
        return clientes;
    }
}
